using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._IntelligenceTools._Conversion
{
    /// <summary>
    /// <para>Create Location File From Text File</para>
    /// <para>Creates a location file for use in ArcGIS LocateXT from a text file from GeoNames, National Geospatial-Intelligence Agency Geonet Names Server, or U.S. Geological Survey Geographic Names Information Service.</para>
    /// <para>从 GeoNames、National Geospatial-Intelligence Agency Geonet Names Server 或 U.S. Geological Survey Geographic Names Information Service 中的文本文件创建用于 ArcGIS LocateXT 的位置文件。</para>
    /// </summary>    
    [DisplayName("Create Location File From Text File")]
    public class CreateLocationFileFromTextFile : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public CreateLocationFileFromTextFile()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_in_placenames_file">
        /// <para>Input Placenames File</para>
        /// <para>A place names text file obtained from GeoNames, NGA GNS, or USGS GNIS.</para>
        /// <para>从 GeoNames、NGA GNS 或 USGS GNIS 获取的地名文本文件。</para>
        /// </param>
        /// <param name="_data_source">
        /// <para>Data Source</para>
        /// <para><xdoc>
        ///   <para>Specifies the data source from which the input was created.</para>
        ///   <bulletList>
        ///     <bullet_item>GeoNames— The input file is from GeoNames.org.</bullet_item><para/>
        ///     <bullet_item>NGA GNS—The input file is from NGA GNS.</bullet_item><para/>
        ///     <bullet_item>USGS GNIS—The input file is from USGS GNIS.</bullet_item><para/>
        ///     <bullet_item>USGS Antarctic Names—The input file is from USGS GNIS Antarctic Names.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定从中创建输入的数据源。</para>
        ///   <bulletList>
        ///     <bullet_item>GeoNames- 输入文件来自 GeoNames.org。</bullet_item><para/>
        ///     <bullet_item>NGA GNS - 输入文件来自 NGA GNS。</bullet_item><para/>
        ///     <bullet_item>USGS GNIS - 输入文件来自 USGS GNIS。</bullet_item><para/>
        ///     <bullet_item>USGS 南极名称 - 输入文件来自 USGS GNIS 南极名称。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// </param>
        /// <param name="_out_location_file">
        /// <para>Output Location File</para>
        /// <para>The output location file.</para>
        /// <para>输出位置文件。</para>
        /// </param>
        public CreateLocationFileFromTextFile(object _in_placenames_file, _data_source_value _data_source, object _out_location_file)
        {
            this._in_placenames_file = _in_placenames_file;
            this._data_source = _data_source;
            this._out_location_file = _out_location_file;
        }
        public override string ToolboxName => "Intelligence Tools";

        public override string ToolName => "Create Location File From Text File";

        public override string CallName => "intelligence.CreateLocationFileFromTextFile";

        public override List<string> AcceptEnvironments => [];

        public override object[] ParameterInfo => [_in_placenames_file, _data_source.GetGPValue(), _out_location_file, _include_features, _in_rois];

        /// <summary>
        /// <para>Input Placenames File</para>
        /// <para>A place names text file obtained from GeoNames, NGA GNS, or USGS GNIS.</para>
        /// <para>从 GeoNames、NGA GNS 或 USGS GNIS 获取的地名文本文件。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Placenames File")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_placenames_file { get; set; }


        /// <summary>
        /// <para>Data Source</para>
        /// <para><xdoc>
        ///   <para>Specifies the data source from which the input was created.</para>
        ///   <bulletList>
        ///     <bullet_item>GeoNames— The input file is from GeoNames.org.</bullet_item><para/>
        ///     <bullet_item>NGA GNS—The input file is from NGA GNS.</bullet_item><para/>
        ///     <bullet_item>USGS GNIS—The input file is from USGS GNIS.</bullet_item><para/>
        ///     <bullet_item>USGS Antarctic Names—The input file is from USGS GNIS Antarctic Names.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定从中创建输入的数据源。</para>
        ///   <bulletList>
        ///     <bullet_item>GeoNames- 输入文件来自 GeoNames.org。</bullet_item><para/>
        ///     <bullet_item>NGA GNS - 输入文件来自 NGA GNS。</bullet_item><para/>
        ///     <bullet_item>USGS GNIS - 输入文件来自 USGS GNIS。</bullet_item><para/>
        ///     <bullet_item>USGS 南极名称 - 输入文件来自 USGS GNIS 南极名称。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Data Source")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public _data_source_value _data_source { get; set; }

        public enum _data_source_value
        {
            /// <summary>
            /// <para>GeoNames</para>
            /// <para>GeoNames— The input file is from GeoNames.org.</para>
            /// <para>GeoNames- 输入文件来自 GeoNames.org。</para>
            /// </summary>
            [Description("GeoNames")]
            [GPEnumValue("GEONAMES")]
            _GEONAMES,

            /// <summary>
            /// <para>NGA GNS</para>
            /// <para>NGA GNS—The input file is from NGA GNS.</para>
            /// <para>NGA GNS - 输入文件来自 NGA GNS。</para>
            /// </summary>
            [Description("NGA GNS")]
            [GPEnumValue("NGA_GNS")]
            _NGA_GNS,

            /// <summary>
            /// <para>USGS GNIS</para>
            /// <para>USGS GNIS—The input file is from USGS GNIS.</para>
            /// <para>USGS GNIS - 输入文件来自 USGS GNIS。</para>
            /// </summary>
            [Description("USGS GNIS")]
            [GPEnumValue("USGS_GNIS")]
            _USGS_GNIS,

            /// <summary>
            /// <para>USGS Antarctic Names</para>
            /// <para>USGS Antarctic Names—The input file is from USGS GNIS Antarctic Names.</para>
            /// <para>USGS 南极名称 - 输入文件来自 USGS GNIS 南极名称。</para>
            /// </summary>
            [Description("USGS Antarctic Names")]
            [GPEnumValue("USGS_ANTARCTIC_NAMES")]
            _USGS_ANTARCTIC_NAMES,

        }

        /// <summary>
        /// <para>Output Location File</para>
        /// <para>The output location file.</para>
        /// <para>输出位置文件。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Location File")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _out_location_file { get; set; }


        /// <summary>
        /// <para>Include Features</para>
        /// <para><xdoc>
        ///   <para>Specifies the feature class types from the input data source that will be included in the output.</para>
        ///   <bulletList>
        ///     <bullet_item>Administrative Features— Administrative features such as administrative boundaries, town, city, state, province, tribal, and country borders will be included.</bullet_item><para/>
        ///     <bullet_item>Hydrological Features—Features such as rivers, lakes, ponds, and other water features will be included.</bullet_item><para/>
        ///     <bullet_item>Locality Features—Features such as buildings, churches, hospitals, and other human-made points of interest will be included.</bullet_item><para/>
        ///     <bullet_item>Populated Places—Locations of named places such as towns, cities, villages, and other consolidated areas of people will be included.</bullet_item><para/>
        ///     <bullet_item>Transportation Features—Features such as roads, trails, railroads, and airports will be included.</bullet_item><para/>
        ///     <bullet_item>Spot Features—Hypsographic features such as mountain peaks and other natural points of interest will be included.</bullet_item><para/>
        ///     <bullet_item>Terrain Features—Features such as mountains, hills, cliffs, craters, and ridges will be included.</bullet_item><para/>
        ///     <bullet_item>Vegetation Features—Features such as forests, bushland, scrubland, and other areas of consistent vegetation will be included.</bullet_item><para/>
        ///     <bullet_item>Undersea Features—Undersea features such as reefs, bars, and shipwrecks will be included.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定输入数据源中将包含在输出中的要素类类型。</para>
        ///   <bulletList>
        ///     <bullet_item>管理要素 - 将包括行政边界、城镇、城市、州、省、部落和国家/地区边界等管理要素。</bullet_item><para/>
        ///     <bullet_item>水文要素 - 将包括河流、湖泊、池塘和其他水要素等要素。</bullet_item><para/>
        ///     <bullet_item>局部要素 - 将包括建筑物、教堂、医院和其他人造兴趣点等要素。</bullet_item><para/>
        ///     <bullet_item>人口稠密地点 - 将包括城镇、城市、村庄和其他合并人口区域等指定地点的位置。</bullet_item><para/>
        ///     <bullet_item>交通要素 - 将包括道路、步道、铁路和机场等要素。</bullet_item><para/>
        ///     <bullet_item>斑点特征 - 将包括山峰和其他自然兴趣点等催眠特征。</bullet_item><para/>
        ///     <bullet_item>地形要素—将包括山脉、丘陵、悬崖、陨石坑和山脊等要素。</bullet_item><para/>
        ///     <bullet_item>植被要素 - 将包括森林、丛林、灌木丛和其他植被一致区域等要素。</bullet_item><para/>
        ///     <bullet_item>海底要素 - 将包括珊瑚礁、酒吧和沉船等海底要素。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Include Features")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public List<object> _include_features { get; set; } = null;


        /// <summary>
        /// <para>Input Regions Of Interest</para>
        /// <para>The feature layer that will be used to create a subset of the input place names file.</para>
        /// <para>将用于创建输入地名文件子集的要素图层。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Regions Of Interest")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _in_rois { get; set; } = null;


        public CreateLocationFileFromTextFile SetEnv()
        {
            base.SetEnv();
            return this;
        }

    }

}